package com.ruoyi.web.service.glzz.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.web.domain.glzz.TGlzzMenu;
import com.ruoyi.web.domain.glzz.dao.TGlzzMenuUpdateDao;
import com.ruoyi.web.mapper.glzz.TGlzzMenuMapper;
import com.ruoyi.web.service.glzz.ITGlzzMenuService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;


/**
 * glzz菜单Service业务层处理
 *
 * @author sci
 * @date 2024-05-13
 */
@Service
public class TGlzzMenuServiceImpl extends ServiceImpl<TGlzzMenuMapper, TGlzzMenu> implements ITGlzzMenuService {

    @Resource
    TGlzzMenuMapper tGlzzMenuMapper;
    @Override
    public AjaxResult updateTrans(TGlzzMenuUpdateDao tGlzzMenuUpdateDao) {
        if (Objects.isNull(tGlzzMenuUpdateDao.getId())) {
            return AjaxResult.error("修改失败，未传入id");
        }

        if (Objects.isNull(tGlzzMenuUpdateDao.getNodeId())) {
            return AjaxResult.error("菜单id必填");
        }
        if (Objects.isNull(tGlzzMenuUpdateDao.getParentNodeId())) {
            return AjaxResult.error("菜单父id必填");
        }
        if (Objects.isNull(tGlzzMenuUpdateDao.getMetaTitle())) {
            return AjaxResult.error("菜单必填必填");
        }
        if (Objects.isNull(tGlzzMenuUpdateDao.getMetaTitleAlias())) {
            return AjaxResult.error("菜单别名必填");
        }
        if (Objects.isNull(tGlzzMenuUpdateDao.getOrderNum())) {
            return AjaxResult.error("菜单顺序必填");
        }
        if (Objects.isNull(tGlzzMenuUpdateDao.getStatus())) {
            return AjaxResult.error("是否启用必填");
        }
        if (Objects.isNull(tGlzzMenuUpdateDao.getName())) {
            return AjaxResult.error("路由名必填");
        }
        if (Objects.isNull(tGlzzMenuUpdateDao.getComponent())) {
            return AjaxResult.error("组件名必填");
        }
        if (Objects.isNull(tGlzzMenuUpdateDao.getAddress())) {
            return AjaxResult.error("路由地址必填");
        }

        LambdaQueryWrapper<TGlzzMenu> lambdaQueryWrapper = new LambdaQueryWrapper();
        lambdaQueryWrapper.eq(TGlzzMenu::getId, tGlzzMenuUpdateDao.getId());
        TGlzzMenu tGlzzMenu = this.getOne(lambdaQueryWrapper);
        if (Objects.isNull(tGlzzMenu)) {
            return AjaxResult.error("修改失败，未查询到数据");
        }



        LambdaQueryWrapper<TGlzzMenu> lambdaQueryWrappe1 = new LambdaQueryWrapper<>();
        lambdaQueryWrappe1.ne(TGlzzMenu::getNodeId, tGlzzMenu.getNodeId());
        lambdaQueryWrappe1.eq(TGlzzMenu::getNodeId, tGlzzMenuUpdateDao.getNodeId());
        List<TGlzzMenu> list = this.list(lambdaQueryWrappe1);
        if (list.size() > 0) {
            return AjaxResult.error("菜单id重复");
        }

//      修改上级、把下级的parentid改掉
        LambdaQueryWrapper<TGlzzMenu> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
        lambdaQueryWrapper1.eq(TGlzzMenu::getParentNodeId, tGlzzMenu.getNodeId());
        List<TGlzzMenu> listSons = this.list(lambdaQueryWrapper1);
        if (listSons.size() > 0) {
            listSons.forEach(item -> {
                item.setParentNodeId(tGlzzMenuUpdateDao.getNodeId());
            });
            this.updateBatchById(listSons);
        }

        // region 更新数据-参数填充
        if (tGlzzMenuUpdateDao.getNodeId() != null) {
            tGlzzMenu.setNodeId(tGlzzMenuUpdateDao.getNodeId());
        }
        if (tGlzzMenuUpdateDao.getParentNodeId() != null) {
            tGlzzMenu.setParentNodeId(tGlzzMenuUpdateDao.getParentNodeId());
        }
        if (tGlzzMenuUpdateDao.getMetaTitle() != null) {
            tGlzzMenu.setMetaTitle(tGlzzMenuUpdateDao.getMetaTitle());
        }
        if (tGlzzMenuUpdateDao.getApp() != null) {
            tGlzzMenu.setApp(tGlzzMenuUpdateDao.getApp());
        }
        if (tGlzzMenuUpdateDao.getWeb() != null) {
            tGlzzMenu.setWeb(tGlzzMenuUpdateDao.getWeb());
        }
        if (tGlzzMenuUpdateDao.getStatus() != null) {
            tGlzzMenu.setStatus(tGlzzMenuUpdateDao.getStatus());
        }
        if (tGlzzMenuUpdateDao.getModuleIcon() != null) {
            tGlzzMenu.setModuleIcon(tGlzzMenuUpdateDao.getModuleIcon());
        }
        if (tGlzzMenuUpdateDao.getName() != null) {
            tGlzzMenu.setName(tGlzzMenuUpdateDao.getName());
        }
        if (tGlzzMenuUpdateDao.getComponent() != null) {
            tGlzzMenu.setComponent(tGlzzMenuUpdateDao.getComponent());
        }
        if (tGlzzMenuUpdateDao.getMetaIcon() != null) {
            tGlzzMenu.setMetaIcon(tGlzzMenuUpdateDao.getMetaIcon());
        }
        if (tGlzzMenuUpdateDao.getMetaIconActive() != null) {
            tGlzzMenu.setMetaIconActive(tGlzzMenuUpdateDao.getMetaIconActive());
        }
        if (tGlzzMenuUpdateDao.getAddress() != null) {
            tGlzzMenu.setAddress(tGlzzMenuUpdateDao.getAddress());
        }
        if (tGlzzMenuUpdateDao.getFreeUse() != null) {
            tGlzzMenu.setFreeUse(tGlzzMenuUpdateDao.getFreeUse());
        }
        if (tGlzzMenuUpdateDao.getKeepAlive() != null) {
            tGlzzMenu.setKeepAlive(tGlzzMenuUpdateDao.getKeepAlive());
        }
        if (tGlzzMenuUpdateDao.getRemarks() != null) {
            tGlzzMenu.setRemarks(tGlzzMenuUpdateDao.getRemarks());
        }
        if (tGlzzMenuUpdateDao.getIsDev() != null) {
            tGlzzMenu.setIsDev(tGlzzMenuUpdateDao.getIsDev());
        }
        if (tGlzzMenuUpdateDao.getShowUrl() != null) {
            tGlzzMenu.setShowUrl(tGlzzMenuUpdateDao.getShowUrl());
        }
        // endregion
        tGlzzMenu.setOrderNum(tGlzzMenuUpdateDao.getOrderNum());
        tGlzzMenu.setMetaTitleAlias(tGlzzMenuUpdateDao.getMetaTitleAlias());

        if (!tGlzzMenuUpdateDao.getParentNodeId().equals("0")) {
            TGlzzMenu one = this.lambdaQuery().eq(TGlzzMenu::getNodeId, tGlzzMenuUpdateDao.getParentNodeId()).one();
            if (Objects.nonNull(one)) {
                Integer level = one.getLevel();
                tGlzzMenu.setLevel(level + 1);
            }
        } else {
            tGlzzMenu.setLevel(0);
        }


        tGlzzMenu.setAppNodeCode(tGlzzMenuUpdateDao.getAppNodeCode());
        tGlzzMenu.setAppOrderNum(tGlzzMenuUpdateDao.getAppOrderNum());
        Boolean success = this.updateById(tGlzzMenu);
        if (success == false) {
            return AjaxResult.error();
        }
        return AjaxResult.success();
    }

    @Override
    public int insertDataToTable(LocalDateTime timer, Double torq) {
        return tGlzzMenuMapper.insertDataToTable( timer,  torq);
    }
}
